// fileReader1.js
const http = require('http');
const fs = require('fs');
const path = require('path');

// 获取命令行参数
const fileName = process.argv[2];

// 创建HTTP服务器
const server = http.createServer((req, res) => {
    // 只处理根路径的请求
    if (req.url === '/') {
        let fileToRead;
        
        // 判断是否传入了命令行参数
        if (fileName) {
            fileToRead = fileName;
        } else {
            // 如果没有传入参数，默认读取当前文件
            fileToRead = __filename; // 当前文件的完整路径
        }
        
        // 检查文件是否存在
        fs.access(fileToRead, fs.constants.F_OK, (err) => {
            if (err) {
                // 文件不存在
                res.writeHead(404, { 'Content-Type': 'text/html; charset=utf-8' });
                res.end(`
                    <html>
                    <head><title>文件不存在</title></head>
                    <body>
                        <h1>错误：文件不存在</h1>
                        <p>无法找到文件: ${fileToRead}</p>
                        <p>请检查文件名是否正确</p>
                    </body>
                    </html>
                `);
                return;
            }
            
            // 文件存在，读取文件内容
            fs.readFile(fileToRead, 'utf8', (err, data) => {
                if (err) {
                    res.writeHead(500, { 'Content-Type': 'text/html; charset=utf-8' });
                    res.end(`
                        <html>
                        <head><title>读取错误</title></head>
                        <body>
                            <h1>错误：读取文件失败</h1>
                            <p>错误信息: ${err.message}</p>
                        </body>
                        </html>
                    `);
                    return;
                }
                
                // 成功读取文件，显示内容
                res.writeHead(200, { 
                    'Content-Type': 'text/html; charset=utf-8',
                    'Content-Length': Buffer.byteLength(createHTMLResponse(data, fileToRead), 'utf8')
                });
                res.end(createHTMLResponse(data, fileToRead));
            });
        });
    } else {
        // 处理其他路径的请求
        res.writeHead(404, { 'Content-Type': 'text/html; charset=utf-8' });
        res.end(`
            <html>
            <head><title>页面未找到</title></head>
            <body>
                <h1>404 - 页面未找到</h1>
                <p>请求的路径 ${req.url} 不存在</p>
            </body>
            </html>
        `);
    }
});

// 创建HTML响应内容的函数
function createHTMLResponse(fileContent, filePath) {
    return `
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>文件内容查看器</title>
    <style>
        body {
            font-family: 'Consolas', 'Monaco', monospace;
            margin: 20px;
            background-color: #f5f5f5;
        }
        .container {
            background-color: white;
            padding: 20px;
            border-radius: 5px;
            box-shadow: 0 2px 5px rgba(0,0,0,0.1);
        }
        h1 {
            color: #333;
            border-bottom: 2px solid #eee;
            padding-bottom: 10px;
        }
        .file-info {
            background-color: #f0f8ff;
            padding: 10px;
            border-left: 4px solid #2196F3;
            margin-bottom: 20px;
        }
        pre {
            background-color: #f8f8f8;
            padding: 15px;
            border: 1px solid #ddd;
            border-radius: 3px;
            overflow-x: auto;
            white-space: pre-wrap;
            word-wrap: break-word;
        }
        .path {
            font-weight: bold;
            color: #2196F3;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>文件内容查看器</h1>
        <div class="file-info">
            <p>当前查看的文件: <span class="path">${filePath}</span></p>
            <p>文件大小: ${Buffer.byteLength(fileContent, 'utf8')} 字节</p>
        </div>
        <pre>${escapeHTML(fileContent)}</pre>
    </div>
</body>
</html>`;
}

// HTML转义函数，防止XSS攻击
function escapeHTML(text) {
    return text
        .replace(/&/g, '&amp;')
        .replace(/</g, '&lt;')
        .replace(/>/g, '&gt;')
        .replace(/"/g, '&quot;')
        .replace(/'/g, '&#039;');
}

// 启动服务器，监听8081端口
const PORT = 8081;
server.listen(PORT, () => {
    console.log(`服务器已启动，正在监听 ${PORT} 端口`);
    console.log(`访问地址: http://localhost:${PORT}`);
    
    if (fileName) {
        console.log(`将尝试读取文件: ${fileName}`);
    } else {
        console.log(`未指定文件，将读取当前文件: ${path.basename(__filename)}`);
    }
});

// 处理服务器错误
server.on('error', (err) => {
    if (err.code === 'EADDRINUSE') {
        console.error(`错误：端口 ${PORT} 已被占用，请更换端口或关闭占用该端口的程序`);
    } else {
        console.error('服务器错误:', err);
    }
});

// 优雅关闭
process.on('SIGINT', () => {
    console.log('\n正在关闭服务器...');
    server.close(() => {
        console.log('服务器已关闭');
        process.exit(0);
    });
});